package com.noocodecommit.wicket.stuff.jquery.plugin.autodefaulttextfield;

import org.apache.wicket.model.IModel;

import com.noocodecommit.wicket.stuff.jquery.plugin.JQPlugin;

/**
 * @author Nicolas Giard
 */
public class JQAutoDefaultTextFieldUtils
{
	/**
	 * 
	 * @param id
	 * @return JQAutoDefaultTextFieldBuilder
	 */
	public static JQAutoDefaultTextFieldBuilder create(String id)
	{
		return new JQAutoDefaultTextFieldBuilder(new JQAutoDefaultTextField(id));
	}

	/**
	 * @param id
	 * @param key
	 * @param model
	 * @param type
	 * @return JQAutoDefaultTextFieldBuilder
	 */
	public static JQAutoDefaultTextFieldBuilder create(String id, String key, IModel model, Class type)
	{
		return new JQAutoDefaultTextFieldBuilder(new JQAutoDefaultTextField(id, key, model, type));
	}

	/**
	 * @author Nicolas Giard
	 */
	public static final class JQAutoDefaultTextFieldBuilder
	{
		private JQAutoDefaultTextField textField;

		private JQAutoDefaultTextFieldOptions options;

		/**
		 * @param textField
		 */
		public JQAutoDefaultTextFieldBuilder(JQAutoDefaultTextField textField)
		{
			this.textField = textField;
			this.options = new JQAutoDefaultTextFieldOptions();
			cssClassName(JQAutoDefaultTextFieldPlugin.DEFAULT_KEY);
		}

		/**
		 * @param defaultValue
		 * @return JQAutoDefaultTextFieldBuilder
		 */
		public JQAutoDefaultTextFieldBuilder defaultValue(String defaultValue)
		{
			this.options.setDefaultValue(defaultValue);
			return this;
		}
		
		/**
		 * @param cssClassName
		 * @return JQAutoDefaultTextFieldBuilder
		 */
		public JQAutoDefaultTextFieldBuilder cssClassName(String cssClassName)
		{
			this.options.setCssClassName(cssClassName);
			return this;
		}

		/**
		 * @return JQAutoDefaultTextField
		 */
		public JQAutoDefaultTextField build()
		{
			if (textField.getPlugin().getInitMode() == JQPlugin.PLUGIN_INIT_ONCE)
				textField.getPlugin().setOptions(options);
			else
				textField.setOptions(options);
			return textField;
		}
	}
}